package com.example.cc.server.service;

import com.example.cc.server.exception.ConfigNotFoundException;

import java.util.Map;
import java.util.Optional;

/**
 * 配置服务接口，用于管理应用程序的配置项
 * 直接操作内存
 */
public interface ConfigurationMemoryService {

    /**
     * 查询所有配置项
     *
     * @return 配置项映射
     */
    Map<String, Object> getAllConfigs();

    /**
     * 根据键获取配置项值
     *
     * @param key 配置项键
     * @return 配置项值的 Optional 包装
     */
    Optional<Object> getConfigByKey(String key);

    /**
     * 根据键获取配置项值，如果不存在则抛出异常
     *
     * @param key 配置项键
     * @return
     * @throws ConfigNotFoundException
     */
    Object getByKey(String key) throws ConfigNotFoundException;

    /**
     * 检查配置项是否存在
     *
     * @param key 配置项键
     * @return 是否存在
     */
    boolean exists(String key);

    /**
     * 创建新的配置项
     *
     * @param key   配置项键
     * @param value 配置项值
     * @throws IllegalArgumentException 如果配置项已存在
     */
    void create(String key, Object value) throws IllegalArgumentException;

    /**
     * 更新配置项
     *
     * @param key   配置项键
     * @param value 配置项值
     * @throws IllegalArgumentException 如果配置项不存在
     */
    void update(String key, Object value) throws IllegalArgumentException;

    /**
     * 删除配置项
     *
     * @param key 配置项键
     * @return 是否成功删除
     */
    boolean delete(String key);
}
